package com.ruoyi.web.controller.video;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.domain.video.VideoDir;
import com.ruoyi.video.service.IVideoDirService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 視頻-目錄信息
 * 
 * @author ruoyi
 */
@RestController
@RequestMapping("/video/dir")
public class VideoDirController extends BaseController
{
    @Autowired
    private IVideoDirService dirService;

    /**
     * 获取目录列表
     */
    @GetMapping("/list")
    public AjaxResult list(VideoDir dir)
    {
        List<VideoDir> dirs = dirService.selectDirList(dir);
        return success(dirs);
    }

    /**
     * 查询目录列表（排除节点）
     */
    @GetMapping("/list/exclude/{dirId}")
    public AjaxResult excludeChild(@PathVariable(value = "dirId", required = false) Long dirId)
    {
        List<VideoDir> dirs = dirService.selectDirList(new VideoDir());
        dirs.removeIf(d -> d.getId().intValue() == dirId);
        return success(dirs);
    }

    /**
     * 获取部门树列表
     */
    @GetMapping("/dirTree")
    public AjaxResult dirTree(VideoDir dir)
    {
        return success(dirService.selectDirTreeList(dir));
    }

    /**
     * 根据目录编号获取详细信息
     */
    @GetMapping(value = "/info/{dirId}")
    public AjaxResult getInfo(@PathVariable Long dirId)
    {
        return success(dirService.selectDirById(dirId));
    }

    /**
     * 新增目录
     */
    @Log(title = "视频目录管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody VideoDir dir)
    {
        if (!dirService.checkDirNameUnique(dir))
        {
            return error("新增目录'" + dir.getName() + "'失败，目录名称已存在");
        }
        dir.setCreateBy(getUsername());
        return toAjax(dirService.insertDir(dir));
    }

    /**
     * 修改目录
     */
    @Log(title = "视频目录管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody VideoDir dir)
    {
        Long dirId = dir.getId();
        dirService.checkDirDataScope(dirId);
        if (!dirService.checkDirNameUnique(dir))
        {
            return error("修改目录'" + dir.getName() + "'失败，目录名称已存在");
        }
        else if (dir.getParentId().equals(dirId))
        {
            return error("修改目录'" + dir.getName() + "'失败，上级目录不能是自己");
        }
        dir.setUpdateBy(getUsername());
        return toAjax(dirService.updateDir(dir));
    }

    /**
     * 删除目录
     */
    @Log(title = "视频目录管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{dirId}")
    public AjaxResult remove(@PathVariable Long dirId)
    {
        if (dirService.hasChildByDirId(dirId))
        {
            return warn("存在下级目录,不允许删除");
        }
        dirService.checkDirDataScope(dirId);
        return toAjax(dirService.deleteDirById(dirId));
    }
}
